// Package api internal/api/login_info_api.go
package api

import (
	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
	"gozrd-admin-api/internal/entity/dto"
	"gozrd-admin-api/internal/repository"
	"gozrd-admin-api/internal/service"
	"gozrd-admin-api/pkg/response"
	"strconv"
)

// LoginInfoAPI 登录日志控制器
type LoginInfoAPI struct {
	loginInfoService service.ISysLoginInfoService
}

// NewLoginInfoAPI 创建登录日志控制器
func NewLoginInfoAPI(db *gorm.DB) *LoginInfoAPI {
	loginInfoRepo := repository.NewLoginInfoRepository(db)
	loginInfoService := service.NewLoginInfoService(loginInfoRepo)
	return &LoginInfoAPI{
		loginInfoService: loginInfoService,
	}
}

// GetSysLoginInfoList 分页获取登录日志列表
// @Summary 分页获取登录日志列表接口
// @Description 分页获取登录日志列表数据
// @Tags 登录日志
// @Accept json
// @Produce json
// @Param pageNum query int false "页码"
// @Param pageSize query int false "每页数量"
// @Param username query string false "用户名"
// @Param loginStatus query string false "登录状态：1->成功，2->失败"
// @Param beginTime query string false "开始时间"
// @Param endTime query string false "结束时间"
// @Success 200 {object} response.Response "返回登录日志列表"
// @Router /loginInfo/list [get]
func (l *LoginInfoAPI) GetSysLoginInfoList(c *gin.Context) {
	// 解析分页参数
	pageNum, _ := strconv.Atoi(c.DefaultQuery("pageNum", "1"))
	pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))

	// 解析查询条件
	username := c.Query("username")
	loginStatus := c.Query("loginStatus")
	beginTime := c.Query("beginTime")
	endTime := c.Query("endTime")

	l.loginInfoService.GetSysLoginInfoList(c, username, loginStatus, beginTime, endTime, pageSize, pageNum)
}

// BatchDeleteSysLoginInfo 批量删除登录日志
// @Summary 批量删除登录日志接口
// @Description 批量删除登录日志
// @Tags 登录日志
// @Accept json
// @Produce json
// @Param data body dto.DelSysLoginInfoDto true "ID列表"
// @Success 200 {object} response.Response "批量删除成功"
// @Router /loginInfo/batch [delete]
func (l *LoginInfoAPI) BatchDeleteSysLoginInfo(c *gin.Context) {
	var deleteDTO dto.DelSysLoginInfoDto
	if err := c.ShouldBindJSON(&deleteDTO); err != nil {
		response.Fail(c, response.ErrParams, err.Error())
		return
	}

	l.loginInfoService.BatchDeleteSysLoginInfo(c, deleteDTO)
}

// DeleteSysLoginInfoById 根据ID删除登录日志
// @Summary 根据ID删除登录日志接口
// @Description 删除指定ID的登录日志
// @Tags 登录日志
// @Accept json
// @Produce json
// @Param data body dto.SysLoginInfoIdDto true "登录日志ID"
// @Success 200 {object} response.Response "删除成功"
// @Router /loginInfo [delete]
func (l *LoginInfoAPI) DeleteSysLoginInfoById(c *gin.Context) {
	var idDTO dto.SysLoginInfoIdDto
	if err := c.ShouldBindJSON(&idDTO); err != nil {
		response.Fail(c, response.ErrParams, err.Error())
		return
	}

	l.loginInfoService.DeleteSysLoginInfo(c, idDTO)
}

// CleanSysLoginInfo 清空登录日志
// @Summary 清空登录日志接口
// @Description 清空所有登录日志
// @Tags 登录日志
// @Accept json
// @Produce json
// @Success 200 {object} response.Response "清空成功"
// @Router /loginInfo/clean [delete]
func (l *LoginInfoAPI) CleanSysLoginInfo(c *gin.Context) {
	l.loginInfoService.CleanSysLoginInfo(c)
}

// SetLoginInfoServiceForTest 设置登录日志服务，仅供测试使用
func SetLoginInfoServiceForTest(l *LoginInfoAPI, svc service.ISysLoginInfoService) {
	l.loginInfoService = svc
}
